home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctj8506.arc
/
FILEIO.COB
< prev
next >
Wrap
Text File
|
1986-09-14
|
12KB
|
357 lines
IDENTIFICATION DIVISION.
PROGRAM-ID. FILEIO.
* FILE I-O BENCHMARK
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* THESE SELECT STATEMENTS ARE FOR RMCOBOL
* SELECT SEQ-FILE1
* ASSIGN TO INPUT-OUTPUT, "B:FILE1.SEQ"
* ORGANIZATION BINARY SEQUENTIAL.
* SELECT SEQ-FILE2
* ASSIGN TO OUTPUT, "B:FILE2.SEQ"
* ORGANIZATION BINARY SEQUENTIAL.
* SELECT REL-FILE3
* ASSIGN TO RANDOM, "B:FILE3.REL"
* ORGANIZATION RELATIVE
* ACCESS DYNAMIC
* RELATIVE KEY REC-NUM
* FILE STATUS IO-STAT.
* SELECT INX-FILE4
* ASSIGN TO RANDOM, "B:FILE4.DAT"
* ORGANIZATION INDEXED
* ACCESS DYNAMIC
* RECORD KEY REC-KEY
* ALTERNATE RECORD KEY ALT-KEY WITH DUPLICATES
* FILE STATUS IO-STAT.
* THESE SELECT STATEMENTS ARE FOR REALIA COBOL
SELECT SEQ-FILE1
ASSIGN TO "B:FILE1.SEQ[F]"
ORGANIZATION SEQUENTIAL.
SELECT SEQ-FILE2
ASSIGN TO "B:FILE2.SEQ[F]"
ORGANIZATION SEQUENTIAL.
SELECT REL-FILE3
ASSIGN TO "B:FILE3.REL[F]"
ORGANIZATION RELATIVE
ACCESS DYNAMIC
RELATIVE KEY REC-NUM
FILE STATUS IO-STAT.
SELECT INX-FILE4
ASSIGN TO "B:FILE4.DAT"
ORGANIZATION INDEXED
ACCESS DYNAMIC
RECORD KEY REC-KEY
ALTERNATE RECORD KEY ALT-KEY WITH DUPLICATES
FILE STATUS IO-STAT.
DATA DIVISION.
FILE SECTION.
FD SEQ-FILE1 LABEL RECORDS ARE STANDARD.
01 RECORD-1.
05 SEQ-REC-WORD PIC X(7).
05 SEQ-REC-NUM PIC 9999.
05 SEQ-REC-TAIL PIC X(89).
FD SEQ-FILE2 LABEL RECORDS ARE STANDARD.
01 RECORD-2 PIC X(100).
FD REL-FILE3 LABEL RECORDS ARE STANDARD.
01 RECORD-3.
05 REL-REC-WORD PIC X(7).
05 REL-REC-NUM PIC 9999.
05 REL-REC-TAIL PIC X(89).
FD INX-FILE4 LABEL RECORDS ARE STANDARD.
01 RECORD-4.
05 INX-REC-WORD PIC X(7).
05 REC-KEY PIC XXXX.
05 ALT-WORD PIC X(5).
05 ALT-KEY PIC XXXX.
05 INX-REC-TAIL PIC X(80).
WORKING-STORAGE SECTION.
77 REC-LIMIT PIC S999 COMP-3
VALUE 300.
77 REC-COUNT PIC S999 COMP-3.
77 REC-NUM PIC S999 COMP-3.
77 HALF-WAY PIC S999 COMP-3.
77 COUNTER PIC S999 COMP-3.
01 IO-ERR-MSG.
05 FILLER PIC X(16) VALUE "IO-ERROR STATUS ".
05 IO-STAT PIC XX.
01 FILE-MSG.
05 FILE-TYPE PIC X(11).
05 IO-TYPE PIC X(6).
05 MAX-RECS PIC ZZZ9.
05 FILLER PIC X(8) VALUE " RECORDS".
* COPY TIMERDAT for RM, COPY "TIMERDAT.CBL" for Realia.
COPY TIMERDAT.
PROCEDURE DIVISION.
DECLARATIVES.
IO-ERROR SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON REL-FILE3,
INX-FILE4.
REL-IO-ERROR.
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY IO-ERR-MSG.
STOP RUN.
END DECLARATIVES.
MAINLINE SECTION.
000-MAINLINE.
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
DISPLAY " ".
PERFORM 100-SEQ-FILE-I-O THRU 100-EXIT.
PERFORM 200-SEQ-FILE-COPY THRU 200-EXIT.
PERFORM 300-REL-FILE-I-O THRU 300-EXIT.
PERFORM 400-INX-FILE-WRITE THRU 400-EXIT.
PERFORM 500-INX-FILE-READ THRU 500-EXIT.
PERFORM 600-INX-FILE-IO THRU 600-EXIT.
STOP RUN.
100-SEQ-FILE-I-O.
MOVE "SEQUENTIAL " TO FILE-TYPE.
MOVE REC-LIMIT TO MAX-RECS.
MOVE "WRITE " TO IO-TYPE.
DISPLAY FILE-MSG.
ACCEPT TIMER-START FROM TIME.
OPEN OUTPUT SEQ-FILE1.
PERFORM 120-SEQ-LOOP THRU 120-EXIT
VARYING REC-COUNT FROM 1 BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE SEQ-FILE1.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
MOVE "READ " TO IO-TYPE.
DISPLAY FILE-MSG.
ACCEPT TIMER-START FROM TIME.
OPEN INPUT SEQ-FILE1.
PERFORM 130-SEQ-LOOP THRU 130-EXIT
VARYING REC-COUNT FROM 1 BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE SEQ-FILE1.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
100-EXIT. EXIT.
120-SEQ-LOOP.
MOVE "RECORD" TO SEQ-REC-WORD.
MOVE REC-COUNT TO SEQ-REC-NUM.
MOVE SPACES TO SEQ-REC-TAIL.
WRITE RECORD-1.
120-EXIT. EXIT.
130-SEQ-LOOP.
READ SEQ-FILE1.
130-EXIT. EXIT.
200-SEQ-FILE-COPY.
MOVE "COPY " TO IO-TYPE.
DISPLAY FILE-MSG.
ACCEPT TIMER-START FROM TIME.
OPEN INPUT SEQ-FILE1
OUTPUT SEQ-FILE2.
PERFORM 220-COPY-LOOP THRU 220-EXIT
VARYING REC-COUNT FROM 1 BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE SEQ-FILE1, SEQ-FILE2.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
200-EXIT. EXIT.
220-COPY-LOOP.
READ SEQ-FILE1.
MOVE RECORD-1 TO RECORD-2.
WRITE RECORD-2.
220-EXIT. EXIT.
300-REL-FILE-I-O.
MOVE "RELATIVE " TO FILE-TYPE.
MOVE "WRITE" TO IO-TYPE.
DISPLAY FILE-MSG.
ACCEPT TIMER-START FROM TIME.
OPEN OUTPUT REL-FILE3.
PERFORM 310-REL-LOOP THRU 310-EXIT
VARYING REC-NUM FROM 1 BY 1
UNTIL REC-NUM > REC-LIMIT.
CLOSE REL-FILE3.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
MOVE "READ " TO IO-TYPE.
DISPLAY FILE-MSG.
COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
ACCEPT TIMER-START FROM TIME.
OPEN INPUT REL-FILE3.
PERFORM 320-REL-LOOP THRU 320-EXIT
VARYING REC-COUNT FROM HALF-WAY BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE REL-FILE3.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
MOVE "RD-WRT" TO IO-TYPE.
DISPLAY FILE-MSG.
COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
ACCEPT TIMER-START FROM TIME.
OPEN I-O REL-FILE3.
PERFORM 330-REL-LOOP THRU 330-EXIT
VARYING REC-COUNT FROM HALF-WAY BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE REL-FILE3.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
300-EXIT. EXIT.
310-REL-LOOP.
MOVE "RECORD" TO REL-REC-WORD.
MOVE REC-NUM TO REL-REC-NUM.
MOVE SPACES TO REL-REC-TAIL.
WRITE RECORD-3.
310-EXIT. EXIT.
320-REL-LOOP.
MOVE REC-COUNT TO REC-NUM.
READ REL-FILE3.
COMPUTE REC-NUM = REC-NUM - HALF-WAY + 1.
READ REL-FILE3.
320-EXIT. EXIT.
330-REL-LOOP.
MOVE REC-COUNT TO REC-NUM.
READ REL-FILE3.
REWRITE RECORD-3.
COMPUTE REC-NUM = REC-NUM - HALF-WAY + 1.
READ REL-FILE3.
REWRITE RECORD-3.
330-EXIT. EXIT.
400-INX-FILE-WRITE.
MOVE "INDEXED " TO FILE-TYPE.
MOVE "WRITE" TO IO-TYPE.
DISPLAY FILE-MSG.
COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
MOVE ZERO TO COUNTER.
ACCEPT TIMER-START FROM TIME.
OPEN OUTPUT INX-FILE4.
PERFORM 420-INX-LOOP THRU 420-EXIT
VARYING REC-COUNT FROM HALF-WAY BY 1
UNTIL REC-COUNT > REC-LIMIT.
CLOSE INX-FILE4.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
400-EXIT. EXIT.
420-INX-LOOP.
MOVE "RECORD" TO INX-REC-WORD.
MOVE REC-COUNT TO REC-KEY.
ADD 1 TO COUNTER.
MOVE COUNTER TO ALT-KEY.
MOVE " ALT " TO ALT-WORD.
MOVE SPACES TO INX-REC-TAIL.
WRITE RECORD-4.
COMPUTE REC-NUM = REC-COUNT - HALF-WAY + 1.
MOVE "RECORD" TO INX-REC-WORD.
MOVE REC-NUM TO REC-KEY.
ADD 1 TO COUNTER.
MOVE COUNTER TO ALT-KEY.
MOVE " ALT " TO ALT-WORD.
MOVE SPACES TO INX-REC-TAIL.
WRITE RECORD-4.
420-EXIT. EXIT.
500-INX-FILE-READ.
MOVE "READ" TO IO-TYPE.
DISPLAY FILE-MSG.
MOVE ZERO TO REC-NUM.
ACCEPT TIMER-START FROM TIME.
OPEN INPUT INX-FILE4.
PERFORM 520-INX-LOOP THRU 520-EXIT
VARYING REC-COUNT FROM REC-LIMIT BY -1
UNTIL REC-COUNT < HALF-WAY.
CLOSE INX-FILE4.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
500-EXIT. EXIT.
520-INX-LOOP.
MOVE REC-COUNT TO REC-KEY.
READ INX-FILE4 KEY IS REC-KEY
INVALID KEY GO TO 990-STOP.
ADD 1 TO REC-NUM.
MOVE REC-NUM TO REC-KEY.
READ INX-FILE4 KEY IS REC-KEY
INVALID KEY GO TO 990-STOP.
520-EXIT. EXIT.
600-INX-FILE-IO.
MOVE "RD-WRT" TO IO-TYPE.
DISPLAY FILE-MSG.
MOVE 200 TO COUNTER.
MOVE ZERO TO REC-NUM.
ACCEPT TIMER-START FROM TIME.
OPEN I-O INX-FILE4.
PERFORM 620-INX-LOOP THRU 620-EXIT
VARYING REC-COUNT FROM REC-LIMIT BY -1
UNTIL REC-COUNT < HALF-WAY.
CLOSE INX-FILE4.
ACCEPT TIMER-END FROM TIME.
PERFORM 2400-CALC-TIME THRU 2400-EXIT.
DISPLAY ELAPSED-TIME.
600-EXIT. EXIT.
620-INX-LOOP.
MOVE REC-COUNT TO REC-KEY.
READ INX-FILE4 KEY IS REC-KEY
INVALID KEY GO TO 990-STOP.
SUBTRACT 1 FROM COUNTER.
MOVE COUNTER TO ALT-KEY.
REWRITE RECORD-4.
ADD 1 TO REC-NUM.
MOVE REC-NUM TO REC-KEY.
READ INX-FILE4 KEY IS REC-KEY
INVALID KEY GO TO 990-STOP.
SUBTRACT 1 FROM COUNTER.
MOVE COUNTER TO ALT-KEY.
REWRITE RECORD-4.
620-EXIT. EXIT.
990-STOP.
DISPLAY "INVALID KEY ", REC-KEY.
STOP RUN.
* COPY TIMERPRO for RM, COPY "TIMERPRO.CBL" for Realia.
COPY TIMERPRO.